{"cells":[{"cell_type":"code","source":["from pyspark.sql import SparkSession\nfrom pyspark.sql.functions import udf, countDistinct, count, when, sum,col\nfrom pyspark.sql.types import IntegerType\n\nfrom pyspark.ml import Pipeline\nfrom pyspark.ml.classification import LogisticRegression\nfrom pyspark.ml.evaluation import MulticlassClassificationEvaluator\nfrom pyspark.ml.regression import LinearRegression\nfrom pyspark.ml.tuning import CrossValidator, ParamGridBuilder\n\nfrom pyspark.ml.feature import OneHotEncoder, StringIndexer, MinMaxScaler, VectorAssembler\nfrom pyspark.ml.classification import LogisticRegression, RandomForestClassifier, GBTClassifier\nfrom sklearn.metrics import confusion_matrix\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nimport warnings\nnp.random.seed(1010)\n\nwarnings.filterwarnings('ignore')\n%matplotlib inline"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"662c1738-b103-486d-bcbb-f8713bedc2e1"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["# %sql\n# SELECT * FROM mini_sparkify_event_data_json LIMIT 10"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"23e12a5a-0d14-4986-a1b2-4d25dc2d5c2a"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["%fs ls FileStore/tables/sparkify/mini_sparkify_event_data.json"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"88c883bb-8fe6-4d15-8325-92500def6066"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["dbfs:/FileStore/tables/sparkify/mini_sparkify_event_data.json","mini_sparkify_event_data.json",128477301]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"path","type":"\"string\"","metadata":"{}"},{"name":"name","type":"\"string\"","metadata":"{}"},{"name":"size","type":"\"long\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{"isDbfsCommandResult":false},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["<style scoped>\n  .table-result-container {\n    max-height: 300px;\n    overflow: auto;\n  }\n  table, th, td {\n    border: 1px solid black;\n    border-collapse: collapse;\n  }\n  th, td {\n    padding: 5px;\n  }\n  th {\n    text-align: left;\n  }\n</style><div class='table-result-container'><table class='table-result'><thead style='background-color: white'><tr><th>path</th><th>name</th><th>size</th></tr></thead><tbody><tr><td>dbfs:/FileStore/tables/sparkify/mini_sparkify_event_data.json</td><td>mini_sparkify_event_data.json</td><td>128477301</td></tr></tbody></table></div>"]}}],"execution_count":0},{"cell_type":"code","source":["# create a Spark session\nspark = (SparkSession.builder \n                    .master(\"local\") \n                    .appName(\"Creating Features\") \n                    .getOrCreate())\n\nt= '/FileStore/tables/sparkify/mini_sparkify_event_data.json'\nevents = spark.read.load(t, 'json')\nevents.persist()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"a936fd65-a8f3-428e-bb2b-6b0d69e4631c"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[3]: DataFrame[artist: string, auth: string, firstName: string, gender: string, itemInSession: bigint, lastName: string, length: double, level: string, location: string, method: string, page: string, registration: bigint, sessionId: bigint, song: string, status: bigint, ts: bigint, userAgent: string, userId: string]","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["Out[3]: DataFrame[artist: string, auth: string, firstName: string, gender: string, itemInSession: bigint, lastName: string, length: double, level: string, location: string, method: string, page: string, registration: bigint, sessionId: bigint, song: string, status: bigint, ts: bigint, userAgent: string, userId: string]"]}}],"execution_count":0},{"cell_type":"code","source":["type(events)"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"469092b9-1949-401c-99c9-bcec983e7a03"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[4]: pyspark.sql.dataframe.DataFrame","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["Out[4]: pyspark.sql.dataframe.DataFrame"]}}],"execution_count":0},{"cell_type":"code","source":["events.printSchema()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"285d2459-fce7-4f33-81d6-2effebd80b1a"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"root\n |-- artist: string (nullable = true)\n |-- auth: string (nullable = true)\n |-- firstName: string (nullable = true)\n |-- gender: string (nullable = true)\n |-- itemInSession: long (nullable = true)\n |-- lastName: string (nullable = true)\n |-- length: double (nullable = true)\n |-- level: string (nullable = true)\n |-- location: string (nullable = true)\n |-- method: string (nullable = true)\n |-- page: string (nullable = true)\n |-- registration: long (nullable = true)\n |-- sessionId: long (nullable = true)\n |-- song: string (nullable = true)\n |-- status: long (nullable = true)\n |-- ts: long (nullable = true)\n |-- userAgent: string (nullable = true)\n |-- userId: string (nullable = true)\n\n","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["root\n |-- artist: string (nullable = true)\n |-- auth: string (nullable = true)\n |-- firstName: string (nullable = true)\n |-- gender: string (nullable = true)\n |-- itemInSession: long (nullable = true)\n |-- lastName: string (nullable = true)\n |-- length: double (nullable = true)\n |-- level: string (nullable = true)\n |-- location: string (nullable = true)\n |-- method: string (nullable = true)\n |-- page: string (nullable = true)\n |-- registration: long (nullable = true)\n |-- sessionId: long (nullable = true)\n |-- song: string (nullable = true)\n |-- status: long (nullable = true)\n |-- ts: long (nullable = true)\n |-- userAgent: string (nullable = true)\n |-- userId: string (nullable = true)\n\n"]}}],"execution_count":0},{"cell_type":"code","source":["df = events.toPandas()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"a670d363-6c5b-4f87-a034-7953b82ed101"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["df.head()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"a93de2db-a82e-4410-8d03-80ccdce1cfb4"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>artist</th>\n      <th>auth</th>\n      <th>firstName</th>\n      <th>gender</th>\n      <th>itemInSession</th>\n      <th>lastName</th>\n      <th>length</th>\n      <th>level</th>\n      <th>location</th>\n      <th>method</th>\n      <th>page</th>\n      <th>registration</th>\n      <th>sessionId</th>\n      <th>song</th>\n      <th>status</th>\n      <th>ts</th>\n      <th>userAgent</th>\n      <th>userId</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Martha Tilston</td>\n      <td>Logged In</td>\n      <td>Colin</td>\n      <td>M</td>\n      <td>50</td>\n      <td>Freeman</td>\n      <td>277.89016</td>\n      <td>paid</td>\n      <td>Bakersfield, CA</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538173e+12</td>\n      <td>29</td>\n      <td>Rockpools</td>\n      <td>200</td>\n      <td>1538352117000</td>\n      <td>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) G...</td>\n      <td>30</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Five Iron Frenzy</td>\n      <td>Logged In</td>\n      <td>Micah</td>\n      <td>M</td>\n      <td>79</td>\n      <td>Long</td>\n      <td>236.09424</td>\n      <td>free</td>\n      <td>Boston-Cambridge-Newton, MA-NH</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538332e+12</td>\n      <td>8</td>\n      <td>Canada</td>\n      <td>200</td>\n      <td>1538352180000</td>\n      <td>\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebK...</td>\n      <td>9</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Adam Lambert</td>\n      <td>Logged In</td>\n      <td>Colin</td>\n      <td>M</td>\n      <td>51</td>\n      <td>Freeman</td>\n      <td>282.82730</td>\n      <td>paid</td>\n      <td>Bakersfield, CA</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538173e+12</td>\n      <td>29</td>\n      <td>Time For Miracles</td>\n      <td>200</td>\n      <td>1538352394000</td>\n      <td>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) G...</td>\n      <td>30</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Enigma</td>\n      <td>Logged In</td>\n      <td>Micah</td>\n      <td>M</td>\n      <td>80</td>\n      <td>Long</td>\n      <td>262.71302</td>\n      <td>free</td>\n      <td>Boston-Cambridge-Newton, MA-NH</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538332e+12</td>\n      <td>8</td>\n      <td>Knocking On Forbidden Doors</td>\n      <td>200</td>\n      <td>1538352416000</td>\n      <td>\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebK...</td>\n      <td>9</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>Daft Punk</td>\n      <td>Logged In</td>\n      <td>Colin</td>\n      <td>M</td>\n      <td>52</td>\n      <td>Freeman</td>\n      <td>223.60771</td>\n      <td>paid</td>\n      <td>Bakersfield, CA</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538173e+12</td>\n      <td>29</td>\n      <td>Harder Better Faster Stronger</td>\n      <td>200</td>\n      <td>1538352676000</td>\n      <td>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) G...</td>\n      <td>30</td>\n    </tr>\n  </tbody>\n</table>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>artist</th>\n      <th>auth</th>\n      <th>firstName</th>\n      <th>gender</th>\n      <th>itemInSession</th>\n      <th>lastName</th>\n      <th>length</th>\n      <th>level</th>\n      <th>location</th>\n      <th>method</th>\n      <th>page</th>\n      <th>registration</th>\n      <th>sessionId</th>\n      <th>song</th>\n      <th>status</th>\n      <th>ts</th>\n      <th>userAgent</th>\n      <th>userId</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Martha Tilston</td>\n      <td>Logged In</td>\n      <td>Colin</td>\n      <td>M</td>\n      <td>50</td>\n      <td>Freeman</td>\n      <td>277.89016</td>\n      <td>paid</td>\n      <td>Bakersfield, CA</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538173e+12</td>\n      <td>29</td>\n      <td>Rockpools</td>\n      <td>200</td>\n      <td>1538352117000</td>\n      <td>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) G...</td>\n      <td>30</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Five Iron Frenzy</td>\n      <td>Logged In</td>\n      <td>Micah</td>\n      <td>M</td>\n      <td>79</td>\n      <td>Long</td>\n      <td>236.09424</td>\n      <td>free</td>\n      <td>Boston-Cambridge-Newton, MA-NH</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538332e+12</td>\n      <td>8</td>\n      <td>Canada</td>\n      <td>200</td>\n      <td>1538352180000</td>\n      <td>\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebK...</td>\n      <td>9</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Adam Lambert</td>\n      <td>Logged In</td>\n      <td>Colin</td>\n      <td>M</td>\n      <td>51</td>\n      <td>Freeman</td>\n      <td>282.82730</td>\n      <td>paid</td>\n      <td>Bakersfield, CA</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538173e+12</td>\n      <td>29</td>\n      <td>Time For Miracles</td>\n      <td>200</td>\n      <td>1538352394000</td>\n      <td>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) G...</td>\n      <td>30</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Enigma</td>\n      <td>Logged In</td>\n      <td>Micah</td>\n      <td>M</td>\n      <td>80</td>\n      <td>Long</td>\n      <td>262.71302</td>\n      <td>free</td>\n      <td>Boston-Cambridge-Newton, MA-NH</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538332e+12</td>\n      <td>8</td>\n      <td>Knocking On Forbidden Doors</td>\n      <td>200</td>\n      <td>1538352416000</td>\n      <td>\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebK...</td>\n      <td>9</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>Daft Punk</td>\n      <td>Logged In</td>\n      <td>Colin</td>\n      <td>M</td>\n      <td>52</td>\n      <td>Freeman</td>\n      <td>223.60771</td>\n      <td>paid</td>\n      <td>Bakersfield, CA</td>\n      <td>PUT</td>\n      <td>NextSong</td>\n      <td>1.538173e+12</td>\n      <td>29</td>\n      <td>Harder Better Faster Stronger</td>\n      <td>200</td>\n      <td>1538352676000</td>\n      <td>Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) G...</td>\n      <td>30</td>\n    </tr>\n  </tbody>\n</table>\n</div>"]}}],"execution_count":0},{"cell_type":"code","source":["df.shape"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"b8142aa3-cf57-4962-a581-ea004acb931a"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[40]: (286500, 18)","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["Out[40]: (286500, 18)"]}}],"execution_count":0},{"cell_type":"markdown","source":["Auth 列有多少种类别"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"70f13c91-e434-4dca-a987-0e8e918677b5"}}},{"cell_type":"code","source":["events.groupBy(\"auth\").agg(countDistinct(\"userId\")).toPandas()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"253dc6bc-6e5e-45de-9dc6-bb461a4bafef"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>auth</th>\n      <th>count(userId)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Logged Out</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Cancelled</td>\n      <td>52</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Guest</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Logged In</td>\n      <td>225</td>\n    </tr>\n  </tbody>\n</table>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>auth</th>\n      <th>count(userId)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Logged Out</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Cancelled</td>\n      <td>52</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Guest</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Logged In</td>\n      <td>225</td>\n    </tr>\n  </tbody>\n</table>\n</div>"]}}],"execution_count":0},{"cell_type":"markdown","source":["计算page 列里每一种操作的数量"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"b79d815f-87b0-44ce-aa78-e63e8ee19eb2"}}},{"cell_type":"code","source":["events.groupBy(\"page\").agg(countDistinct(\"userId\")).toPandas()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"12ae7f21-a51f-4062-a339-8fbb8b6efb4a"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>page</th>\n      <th>count(userId)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Cancel</td>\n      <td>52</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Submit Downgrade</td>\n      <td>49</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Thumbs Down</td>\n      <td>203</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Home</td>\n      <td>224</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>Downgrade</td>\n      <td>154</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>Roll Advert</td>\n      <td>207</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>Logout</td>\n      <td>213</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>Save Settings</td>\n      <td>132</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>Cancellation Confirmation</td>\n      <td>52</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>About</td>\n      <td>156</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>Submit Registration</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>Settings</td>\n      <td>195</td>\n    </tr>\n    <tr>\n      <th>12</th>\n      <td>Login</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>Register</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>14</th>\n      <td>Add to Playlist</td>\n      <td>215</td>\n    </tr>\n    <tr>\n      <th>15</th>\n      <td>Add Friend</td>\n      <td>206</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>NextSong</td>\n      <td>225</td>\n    </tr>\n    <tr>\n      <th>17</th>\n      <td>Thumbs Up</td>\n      <td>220</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>Help</td>\n      <td>193</td>\n    </tr>\n    <tr>\n      <th>19</th>\n      <td>Upgrade</td>\n      <td>168</td>\n    </tr>\n    <tr>\n      <th>20</th>\n      <td>Error</td>\n      <td>118</td>\n    </tr>\n    <tr>\n      <th>21</th>\n      <td>Submit Upgrade</td>\n      <td>131</td>\n    </tr>\n  </tbody>\n</table>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>page</th>\n      <th>count(userId)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>Cancel</td>\n      <td>52</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>Submit Downgrade</td>\n      <td>49</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>Thumbs Down</td>\n      <td>203</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>Home</td>\n      <td>224</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>Downgrade</td>\n      <td>154</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>Roll Advert</td>\n      <td>207</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>Logout</td>\n      <td>213</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>Save Settings</td>\n      <td>132</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>Cancellation Confirmation</td>\n      <td>52</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>About</td>\n      <td>156</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>Submit Registration</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>Settings</td>\n      <td>195</td>\n    </tr>\n    <tr>\n      <th>12</th>\n      <td>Login</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>Register</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>14</th>\n      <td>Add to Playlist</td>\n      <td>215</td>\n    </tr>\n    <tr>\n      <th>15</th>\n      <td>Add Friend</td>\n      <td>206</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>NextSong</td>\n      <td>225</td>\n    </tr>\n    <tr>\n      <th>17</th>\n      <td>Thumbs Up</td>\n      <td>220</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>Help</td>\n      <td>193</td>\n    </tr>\n    <tr>\n      <th>19</th>\n      <td>Upgrade</td>\n      <td>168</td>\n    </tr>\n    <tr>\n      <th>20</th>\n      <td>Error</td>\n      <td>118</td>\n    </tr>\n    <tr>\n      <th>21</th>\n      <td>Submit Upgrade</td>\n      <td>131</td>\n    </tr>\n  </tbody>\n</table>\n</div>"]}}],"execution_count":0},{"cell_type":"code","source":["events.agg(countDistinct(\"artist\"), \n           countDistinct('song'),\n           countDistinct('userAgent')).toPandas()\n\n#user agent的数量比较少 可以作为一个特征"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"f4185bb5-0506-491c-88f2-7fe04dcb4f4b"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>count(artist)</th>\n      <th>count(song)</th>\n      <th>count(userAgent)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>17655</td>\n      <td>58480</td>\n      <td>56</td>\n    </tr>\n  </tbody>\n</table>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>count(artist)</th>\n      <th>count(song)</th>\n      <th>count(userAgent)</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>17655</td>\n      <td>58480</td>\n      <td>56</td>\n    </tr>\n  </tbody>\n</table>\n</div>"]}}],"execution_count":0},{"cell_type":"markdown","source":["##### 计算流失率churn 作为一个变量 0或1"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"4ef31c6e-5575-40c8-a5e4-d31053a56d4c"}}},{"cell_type":"code","source":["churned_users = (events.filter(events.page == 'Cancellation Confirmation')\n                       .select('userId')\n                       .distinct()\n                       .rdd.flatMap(lambda x: x)\n                       .collect())\n\n# # create a new column indicating the user has churned\nevents = events.withColumn('Churn', \n                            when(events.userId.isin(churned_users), 1).otherwise(0))"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"5f10dfd4-0324-4445-91b3-c4dcc9df98ed"}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["####1. 可视化数据和特征工程"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"cd622b71-a284-470e-a685-f4fcd4599769"}}},{"cell_type":"code","source":["# filter events log to contain only next song\nevents_songs = events.filter(events.page == 'NextSong')\n\n# users count\nuser_count = events_songs.groupby(events_songs.Churn).agg(countDistinct('userId'))\n\n# Total songs played\ntotal_songs = events_songs.groupby(events_songs.Churn).agg(sum('length'))\n\n# find average length of the songs played\navg_song_length = (total_songs.join(user_count, total_songs.Churn == user_count.Churn)\n                                   .drop(user_count.Churn))\navg_song_length = avg_song_length.withColumn('AvgLength', \n                                              avg_song_length['sum(length)'] / avg_song_length['count(userId)'])"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"7b721867-fcb0-4638-a18b-a57d14507007"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["avg_song_length.toPandas()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"f7c42cf3-df56-403f-ba62-a937764e6344"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sum(length)</th>\n      <th>Churn</th>\n      <th>count(userId)</th>\n      <th>AvgLength</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>9.048742e+06</td>\n      <td>1</td>\n      <td>52</td>\n      <td>174014.268551</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.777688e+07</td>\n      <td>0</td>\n      <td>173</td>\n      <td>276166.937468</td>\n    </tr>\n  </tbody>\n</table>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>sum(length)</th>\n      <th>Churn</th>\n      <th>count(userId)</th>\n      <th>AvgLength</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>9.048742e+06</td>\n      <td>1</td>\n      <td>52</td>\n      <td>174014.268551</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4.777688e+07</td>\n      <td>0</td>\n      <td>173</td>\n      <td>276166.937468</td>\n    </tr>\n  </tbody>\n</table>\n</div>"]}}],"execution_count":0},{"cell_type":"code","source":["(avg_song_length.select('Churn', 'AvgLength')\n                .toPandas()\n                .set_index('Churn')\n                .plot(kind = 'bar', figsize = (7, 5), title = 'Average Play Length Churned/Non-Churned Users'))"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"fd604fa5-7810-4c41-86fc-9dc2bdd31f6c"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[14]: <AxesSubplot:title={'center':'Average Play Length Churned/Non-Churned Users'}, xlabel='Churn'>","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["Out[14]: <AxesSubplot:title={'center':'Average Play Length Churned/Non-Churned Users'}, xlabel='Churn'>"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"image","arguments":{}}},"output_type":"display_data","data":{"image/png":"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zz33ZNSoUYwcOZKbb76ZJ554AoC5c+cybdo0/vjHP3Leeedx00038Ytf/KLHS6fXXHMNixYt4pZbbmHBggXcdttt/PznPwdg0aJFnH766SxcuJDtt9+e73znOwCccsopfPWrX2XBggUMGTIEgK233ppPfOITHH/88SxYsIDjjz8egHvuuYerr76aW265hXPPPZenn356Y60iSdrkqrwcOhBmz57NBz/4QQCmTZvGt7/9baZOncoPfvADjj32WK666io+85nPcP311/OmN72JHXbYAYDjjjuOe++9t8t6r7nmGq655hr2228/oDnjXLRoEePGjWPChAlMmjQJgP33358lS5bw8MMP89hjj3HwwQcDcOKJJ/LDH/6wy/rf/va3M2zYMIYNG8ZOO+3Egw8+yNixY/tjlUg96u9bF9owvb3lszkyBDeB1atX85Of/IQ777yTiOCZZ54hIvj617/OV77yFXbYYQcmT57MiBEj1rvuzOSss87ife973/PKlyxZwrBhw559PmTIkGcvh66PjnWsW7duveuQpMHKy6GbwOWXX85JJ53E/fffz5IlS1i6dCkTJkxg6NCh3H777Vx88cVMmzYNgAMOOICf/exnrFmzhnXr1j17CbMrhx9+ODNnzuTxxx8HYNmyZaxYsaLL6bfffntGjBjBzTffDMCcOXOeHTdixAgee+yxvr5cSdpsGIKbwOzZsznmmGOeV/aOd7yDOXPmcOSRR/KjH/3o2U4xY8aM4WMf+xgHHnggb3jDGxg/fjzbbbfds/Odf/75jB079tnHlClTOPHEEzn44IN5zWtew7HHHttjkM2YMYNTTz2VSZMm8cQTTzxb/5vf/Gbuuuuu53WMkaQtWWTmQLehX02ePDk7/p7g3XffzV577TVALVp/jz/+ONtuuy3r1q3jmGOO4T3vec8LQrQ/6ge44IILWL58OV/+8pf7VOfmto61efCe4OCwJdwTjIjbMnNyx3LvCQ5C55xzDtdddx1r165lypQpHH300f1a/1VXXcWnPvUp1q1bx+67784ll1zSr/VL0ubCEByENva3tBx//PHP/guEJNXMe4KSpGpVE4Jb2r3PwcR1K2lzVUUIDh8+nFWrVrmz3gjaf09w+PDhA90USVpvVdwTHDt2LG1tbaxcuXKgm7JFav9leUna3FQRgltttZW/ei5JeoEqLodKktQZ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\n"}}],"execution_count":0},{"cell_type":"markdown","source":["其他与流失有关的变量\n\n以page建立数据透视表"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"e8fdb439-dd8d-4e18-9d15-7c3b9def3ea8"}}},{"cell_type":"code","source":["events_pivot = events.groupby([\"userId\"]).pivot(\"page\").count().fillna(0)\nevents_pivot.toPandas().columns"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"0316ea53-091b-4a66-8eda-02836eb56e5a"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[53]: Index(['userId', 'About', 'Add Friend', 'Add to Playlist', 'Cancel',\n       'Cancellation Confirmation', 'Downgrade', 'Error', 'Help', 'Home',\n       'Login', 'Logout', 'NextSong', 'Register', 'Roll Advert',\n       'Save Settings', 'Settings', 'Submit Downgrade', 'Submit Registration',\n       'Submit Upgrade', 'Thumbs Down', 'Thumbs Up', 'Upgrade'],\n      dtype='object')","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["Out[53]: Index(['userId', 'About', 'Add Friend', 'Add to Playlist', 'Cancel',\n       'Cancellation Confirmation', 'Downgrade', 'Error', 'Help', 'Home',\n       'Login', 'Logout', 'NextSong', 'Register', 'Roll Advert',\n       'Save Settings', 'Settings', 'Submit Downgrade', 'Submit Registration',\n       'Submit Upgrade', 'Thumbs Down', 'Thumbs Up', 'Upgrade'],\n      dtype='object')"]}}],"execution_count":0},{"cell_type":"code","source":["# 转成pandas df, 方便画图\nevents_pivot = events_pivot.toPandas()\nevents_pivot.rename(columns={'Cancellation Confirmation': 'Churn'}, inplace = True)\n"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"4702e2db-862c-4ea8-8e5d-90d3a5c6a040"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["plot_columns = events_pivot.drop('Churn', axis = 1).columns\nplot_columns"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"fd255df7-5a89-4353-a658-164386c444fa"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[17]: Index(['userId', 'About', 'Add Friend', 'Add to Playlist', 'Cancel',\n       'Downgrade', 'Error', 'Help', 'Home', 'Login', 'Logout', 'NextSong',\n       'Register', 'Roll Advert', 'Save Settings', 'Settings',\n       'Submit Downgrade', 'Submit Registration', 'Submit Upgrade',\n       'Thumbs Down', 'Thumbs Up', 'Upgrade'],\n      dtype='object')","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["Out[17]: Index(['userId', 'About', 'Add Friend', 'Add to Playlist', 'Cancel',\n       'Downgrade', 'Error', 'Help', 'Home', 'Login', 'Logout', 'NextSong',\n       'Register', 'Roll Advert', 'Save Settings', 'Settings',\n       'Submit Downgrade', 'Submit Registration', 'Submit Upgrade',\n       'Thumbs Down', 'Thumbs Up', 'Upgrade'],\n      dtype='object')"]}}],"execution_count":0},{"cell_type":"code","source":["fig = plt.figure(figsize=(10, 18))\n\nfor i in range(1,len(plot_columns)):\n    axis = fig.add_subplot(6,4,i)\n    events_pivot.boxplot(plot_columns[i], ax = axis, \n                         grid = False,  by='Churn', showfliers=False)\nfig.tight_layout(rect=[0, 0.03, 1, 0.95])"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"59b37865-21a7-4934-af15-6f1433b96bc4"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"image","arguments":{}}},"output_type":"display_data","data":{"image/png":"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\n"}}],"execution_count":0},{"cell_type":"markdown","source":["特征工程，创建新的特征"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"b23d565a-bb13-40cd-8a13-ae0edb4ab59f"}}},{"cell_type":"code","source":["events = events.drop('firstName', 'lastName', 'auth', 'gender', 'song','artist',\n                      'status', 'method', 'location', 'registration', 'itemInSession')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"ce8ac1ca-de57-4c47-851a-9955e21ddfd9"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["#提取page里的操作 去掉不重要的\nevents_pivot = events.groupby(['userId']).pivot('page').count().fillna(0)\nevents_pivot = events_pivot.drop('About', 'Cancel', 'Login',  'Submit Registration',  'Register', 'Save Settings')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"97396d4e-dfeb-4d9c-9410-1f6b38fc9f4d"}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["平均播放时间"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"c7ccaa61-4003-4449-ad1f-1fac95c3beab"}}},{"cell_type":"code","source":["# filter events log to contain only next song\nevents_songs = events.filter(events.page == 'NextSong')\n\n# Total songs length played\ntotal_length = events_songs.groupby(events_songs.userId).agg(sum('length'))\n\n# join events pivot\nevents_pivot = (events_pivot.join(total_length, on = 'userId', how = 'left')\n                            .withColumnRenamed(\"Cancellation Confirmation\", \"Churn\")\n                            .withColumnRenamed(\"sum(length)\", \"total_length\"))"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"618058e8-3924-4d97-93d7-538b2995ecec"}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["活跃 天数\n\n先提取同一id下最大 最小的时间戳，然后构成同一个表，相减再乘上转换系数变成天数"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"f6eebb35-c88c-49a4-85e1-082aceea3ee0"}}},{"cell_type":"code","source":["convert = 1000*60*60*24 # conversion factor to days\n\n# Find minimum/maximum time stamp of each user\nmin_timestmp = events.select([\"userId\", \"ts\"]).groupby(\"userId\").min(\"ts\")\nmax_timestmp = events.select([\"userId\", \"ts\"]).groupby(\"userId\").max(\"ts\")\n\n# Find days active of each user\ndaysActive = min_timestmp.join(max_timestmp, on=\"userId\")\ndaysActive = (daysActive.withColumn(\"days_active\", \n                                   (col(\"max(ts)\")-col(\"min(ts)\")) / convert))\ndaysActive = daysActive.select([\"userId\", \"days_active\"]) #only use userId and dayes_active tow columns\n# daysActive.toPandas(), two col, id and days_active, join original table with id\n# join events pivot\nevents_pivot = events_pivot.join(daysActive, on = 'userId', how = 'left')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"209ab339-25a7-4ef3-a7e6-de395ddbc402"}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["统计session 个数"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"9e6e9676-ff45-4ed0-833d-1e512b2d5134"}}},{"cell_type":"code","source":["numSessions = (events.select([\"userId\", \"sessionId\"])\n                      .distinct()\n                      .groupby(\"userId\")\n                       .count()\n                      .withColumnRenamed(\"count\", \"num_sessions\"))\n\n#numSessions.toPandas()\n# join events pivot\nevents_pivot = events_pivot.join(numSessions, on = 'userId', how = 'left')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"ea1758b5-cdd2-48a0-a7e3-e5197a179537"}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["统计开始付费的使用天数\n和活跃天数类似，1.最大、最小两个时间戳计算阶段时间 2. join两个时间戳的列为同一个表，方便计算平均天数。3 去掉max min两列 4 和原数据表join"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"8aa923a5-d6ba-48bc-8021-c6eeed707de5"}}},{"cell_type":"code","source":["# Find minimum/maximum time stamp of each user as paid user\npaid_min_ts = events.filter(events.level == 'paid').groupby(\"userId\").min(\"ts\")\npaid_max_ts = events.filter(events.level == 'paid').groupby(\"userId\").max(\"ts\")\n\n# Find days as paid user of each user\n\ndaysPaid = paid_min_ts.join(paid_max_ts, on=\"userId\")\ndaysPaid = (daysPaid.withColumn(\"days_paid\", \n                                (col(\"max(ts)\")-col(\"min(ts)\")) / convert))\ndaysPaid = daysPaid.select([\"userId\", \"days_paid\"])\n\n# join events pivot\nevents_pivot = events_pivot.join(daysPaid, on = 'userId', how='left')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"3b8cf3b6-48e3-4941-bf6e-fd154b84794b"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["# Find minimum/maximum time stamp of each user as paid user\nfree_min_ts = events.filter(events.level == 'free').groupby(\"userId\").min(\"ts\")\nfree_max_ts = events.filter(events.level == 'free').groupby(\"userId\").max(\"ts\")\n\n# Find days as paid user of each user\ndaysFree = free_min_ts.join(free_max_ts, on=\"userId\")\ndaysFree = (daysFree.withColumn(\"days_free\", \n                                (col(\"max(ts)\")-col(\"min(ts)\")) / convert))\ndaysFree = daysFree.select([\"userId\", \"days_free\"])\n\n# join events pivot\nevents_pivot = events_pivot.join(daysFree, on = 'userId', how='left')"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"71eb6f23-8178-4b09-af93-0be11a4d657e"}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["用户设备类型"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"c1fdf3fc-85eb-4ecb-816f-f11a99ab8205"}}},{"cell_type":"code","source":["events_pivot = events_pivot.fillna(0)"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"93d0f70e-a44a-417f-8095-05835b8743c6"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["events_pivot.toPandas()"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"e90db870-0b28-47d6-a039-9461fee8de6c"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>userId</th>\n      <th>Add Friend</th>\n      <th>Add to Playlist</th>\n      <th>label</th>\n      <th>Downgrade</th>\n      <th>Error</th>\n      <th>Help</th>\n      <th>Home</th>\n      <th>Logout</th>\n      <th>NextSong</th>\n      <th>...</th>\n      <th>Submit Downgrade</th>\n      <th>Submit Upgrade</th>\n      <th>Thumbs Down</th>\n      <th>Thumbs Up</th>\n      <th>Upgrade</th>\n      <th>total_length</th>\n      <th>days_active</th>\n      <th>num_sessions</th>\n      <th>days_paid</th>\n      <th>days_free</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td></td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>6</td>\n      <td>272</td>\n      <td>4375</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.00000</td>\n      <td>60.954815</td>\n      <td>1629</td>\n      <td>60.656736</td>\n      <td>60.939711</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>10</td>\n      <td>12</td>\n      <td>9</td>\n      <td>0</td>\n      <td>7</td>\n      <td>0</td>\n      <td>1</td>\n      <td>30</td>\n      <td>11</td>\n      <td>673</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>4</td>\n      <td>37</td>\n      <td>0</td>\n      <td>166866.37251</td>\n      <td>42.437130</td>\n      <td>6</td>\n      <td>42.437130</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>100</td>\n      <td>49</td>\n      <td>61</td>\n      <td>0</td>\n      <td>30</td>\n      <td>3</td>\n      <td>18</td>\n      <td>105</td>\n      <td>35</td>\n      <td>2682</td>\n      <td>...</td>\n      <td>1</td>\n      <td>1</td>\n      <td>27</td>\n      <td>148</td>\n      <td>1</td>\n      <td>672877.85659</td>\n      <td>58.966285</td>\n      <td>35</td>\n      <td>58.966285</td>\n      <td>9.810764</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>100001</td>\n      <td>2</td>\n      <td>3</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>1</td>\n      <td>11</td>\n      <td>7</td>\n      <td>133</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>2</td>\n      <td>8</td>\n      <td>2</td>\n      <td>35073.74215</td>\n      <td>1.408576</td>\n      <td>4</td>\n      <td>0.000000</td>\n      <td>1.408576</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>100002</td>\n      <td>1</td>\n      <td>5</td>\n      <td>0</td>\n      <td>2</td>\n      <td>0</td>\n      <td>0</td>\n      <td>6</td>\n      <td>1</td>\n      <td>195</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>5</td>\n      <td>0</td>\n      <td>49559.91810</td>\n      <td>55.092951</td>\n      <td>4</td>\n      <td>55.092951</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>221</th>\n      <td>95</td>\n      <td>32</td>\n      <td>46</td>\n      <td>0</td>\n      <td>15</td>\n      <td>5</td>\n      <td>18</td>\n      <td>67</td>\n      <td>28</td>\n      <td>1694</td>\n      <td>...</td>\n      <td>1</td>\n      <td>0</td>\n      <td>25</td>\n      <td>91</td>\n      <td>5</td>\n      <td>427135.54534</td>\n      <td>60.462292</td>\n      <td>33</td>\n      <td>15.141111</td>\n      <td>45.321157</td>\n    </tr>\n    <tr>\n      <th>222</th>\n      <td>96</td>\n      <td>40</td>\n      <td>52</td>\n      <td>0</td>\n      <td>20</td>\n      <td>2</td>\n      <td>9</td>\n      <td>71</td>\n      <td>24</td>\n      <td>1802</td>\n      <td>...</td>\n      <td>1</td>\n      <td>1</td>\n      <td>24</td>\n      <td>92</td>\n      <td>4</td>\n      <td>452492.37829</td>\n      <td>58.155544</td>\n      <td>19</td>\n      <td>58.155544</td>\n      <td>17.334225</td>\n    </tr>\n    <tr>\n      <th>223</th>\n      <td>97</td>\n      <td>32</td>\n      <td>61</td>\n      <td>0</td>\n      <td>17</td>\n      <td>1</td>\n      <td>17</td>\n      <td>100</td>\n      <td>34</td>\n      <td>1975</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>12</td>\n      <td>108</td>\n      <td>3</td>\n      <td>491231.49635</td>\n      <td>54.500579</td>\n      <td>30</td>\n      <td>31.599340</td>\n      <td>22.901204</td>\n    </tr>\n    <tr>\n      <th>224</th>\n      <td>98</td>\n      <td>45</td>\n      <td>58</td>\n      <td>0</td>\n      <td>25</td>\n      <td>3</td>\n      <td>15</td>\n      <td>115</td>\n      <td>39</td>\n      <td>2401</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>22</td>\n      <td>115</td>\n      <td>2</td>\n      <td>611701.97747</td>\n      <td>59.429583</td>\n      <td>28</td>\n      <td>35.758148</td>\n      <td>23.670093</td>\n    </tr>\n    <tr>\n      <th>225</th>\n      <td>99</td>\n      <td>12</td>\n      <td>11</td>\n      <td>0</td>\n      <td>2</td>\n      <td>0</td>\n      <td>1</td>\n      <td>24</td>\n      <td>9</td>\n      <td>505</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>5</td>\n      <td>27</td>\n      <td>2</td>\n      <td>127877.88359</td>\n      <td>54.379896</td>\n      <td>11</td>\n      <td>23.154271</td>\n      <td>31.225069</td>\n    </tr>\n  </tbody>\n</table>\n<p>226 rows × 22 columns</p>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>userId</th>\n      <th>Add Friend</th>\n      <th>Add to Playlist</th>\n      <th>label</th>\n      <th>Downgrade</th>\n      <th>Error</th>\n      <th>Help</th>\n      <th>Home</th>\n      <th>Logout</th>\n      <th>NextSong</th>\n      <th>...</th>\n      <th>Submit Downgrade</th>\n      <th>Submit Upgrade</th>\n      <th>Thumbs Down</th>\n      <th>Thumbs Up</th>\n      <th>Upgrade</th>\n      <th>total_length</th>\n      <th>days_active</th>\n      <th>num_sessions</th>\n      <th>days_paid</th>\n      <th>days_free</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td></td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>6</td>\n      <td>272</td>\n      <td>4375</td>\n      <td>0</td>\n      <td>0</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0.00000</td>\n      <td>60.954815</td>\n      <td>1629</td>\n      <td>60.656736</td>\n      <td>60.939711</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>10</td>\n      <td>12</td>\n      <td>9</td>\n      <td>0</td>\n      <td>7</td>\n      <td>0</td>\n      <td>1</td>\n      <td>30</td>\n      <td>11</td>\n      <td>673</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>4</td>\n      <td>37</td>\n      <td>0</td>\n      <td>166866.37251</td>\n      <td>42.437130</td>\n      <td>6</td>\n      <td>42.437130</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>100</td>\n      <td>49</td>\n      <td>61</td>\n      <td>0</td>\n      <td>30</td>\n      <td>3</td>\n      <td>18</td>\n      <td>105</td>\n      <td>35</td>\n      <td>2682</td>\n      <td>...</td>\n      <td>1</td>\n      <td>1</td>\n      <td>27</td>\n      <td>148</td>\n      <td>1</td>\n      <td>672877.85659</td>\n      <td>58.966285</td>\n      <td>35</td>\n      <td>58.966285</td>\n      <td>9.810764</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>100001</td>\n      <td>2</td>\n      <td>3</td>\n      <td>1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>1</td>\n      <td>11</td>\n      <td>7</td>\n      <td>133</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>2</td>\n      <td>8</td>\n      <td>2</td>\n      <td>35073.74215</td>\n      <td>1.408576</td>\n      <td>4</td>\n      <td>0.000000</td>\n      <td>1.408576</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>100002</td>\n      <td>1</td>\n      <td>5</td>\n      <td>0</td>\n      <td>2</td>\n      <td>0</td>\n      <td>0</td>\n      <td>6</td>\n      <td>1</td>\n      <td>195</td>\n      <td>...</td>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>5</td>\n      <td>0</td>\n      <td>49559.91810</td>\n      <td>55.092951</td>\n      <td>4</td>\n      <td>55.092951</td>\n      <td>0.000000</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>221</th>\n      <td>95</td>\n      <td>32</td>\n      <td>46</td>\n      <td>0</td>\n      <td>15</td>\n      <td>5</td>\n      <td>18</td>\n      <td>67</td>\n      <td>28</td>\n      <td>1694</td>\n      <td>...</td>\n      <td>1</td>\n      <td>0</td>\n      <td>25</td>\n      <td>91</td>\n      <td>5</td>\n      <td>427135.54534</td>\n      <td>60.462292</td>\n      <td>33</td>\n      <td>15.141111</td>\n      <td>45.321157</td>\n    </tr>\n    <tr>\n      <th>222</th>\n      <td>96</td>\n      <td>40</td>\n      <td>52</td>\n      <td>0</td>\n      <td>20</td>\n      <td>2</td>\n      <td>9</td>\n      <td>71</td>\n      <td>24</td>\n      <td>1802</td>\n      <td>...</td>\n      <td>1</td>\n      <td>1</td>\n      <td>24</td>\n      <td>92</td>\n      <td>4</td>\n      <td>452492.37829</td>\n      <td>58.155544</td>\n      <td>19</td>\n      <td>58.155544</td>\n      <td>17.334225</td>\n    </tr>\n    <tr>\n      <th>223</th>\n      <td>97</td>\n      <td>32</td>\n      <td>61</td>\n      <td>0</td>\n      <td>17</td>\n      <td>1</td>\n      <td>17</td>\n      <td>100</td>\n      <td>34</td>\n      <td>1975</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>12</td>\n      <td>108</td>\n      <td>3</td>\n      <td>491231.49635</td>\n      <td>54.500579</td>\n      <td>30</td>\n      <td>31.599340</td>\n      <td>22.901204</td>\n    </tr>\n    <tr>\n      <th>224</th>\n      <td>98</td>\n      <td>45</td>\n      <td>58</td>\n      <td>0</td>\n      <td>25</td>\n      <td>3</td>\n      <td>15</td>\n      <td>115</td>\n      <td>39</td>\n      <td>2401</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>22</td>\n      <td>115</td>\n      <td>2</td>\n      <td>611701.97747</td>\n      <td>59.429583</td>\n      <td>28</td>\n      <td>35.758148</td>\n      <td>23.670093</td>\n    </tr>\n    <tr>\n      <th>225</th>\n      <td>99</td>\n      <td>12</td>\n      <td>11</td>\n      <td>0</td>\n      <td>2</td>\n      <td>0</td>\n      <td>1</td>\n      <td>24</td>\n      <td>9</td>\n      <td>505</td>\n      <td>...</td>\n      <td>0</td>\n      <td>1</td>\n      <td>5</td>\n      <td>27</td>\n      <td>2</td>\n      <td>127877.88359</td>\n      <td>54.379896</td>\n      <td>11</td>\n      <td>23.154271</td>\n      <td>31.225069</td>\n    </tr>\n  </tbody>\n</table>\n<p>226 rows × 22 columns</p>\n</div>"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### 2 .建模\n\n与sk learn不同，spark需要先将训练数据作为的feature的输入先向量化 再输入模型"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"ab2e024f-f4f7-4d4d-920d-75959d67c81b"}}},{"cell_type":"code","source":["# Split data into train and test set\nevents_pivot = events_pivot.withColumnRenamed('Churn', 'label')\ntrain, test = events_pivot.randomSplit([0.8, 0.2])"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"e2e3a056-02a8-491a-86ba-fded93593fa7"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["# Create vector from feature data\nfeature_names = events_pivot.drop('label', 'userId').schema.names\nvec_asembler = VectorAssembler(inputCols = feature_names, outputCol = \"Features\")\n\n# Scale each column\nscalar = MinMaxScaler(inputCol=\"Features\", outputCol=\"ScaledFeatures\")\n\n# build classifiers\nrf = RandomForestClassifier(featuresCol=\"ScaledFeatures\", labelCol=\"label\",\n                                numTrees = 50,  featureSubsetStrategy='sqrt')\n\nlr = LogisticRegression(featuresCol=\"ScaledFeatures\", labelCol=\"label\", \n                        maxIter=10, regParam=0.01)\n\ngbt = GBTClassifier(featuresCol=\"ScaledFeatures\", labelCol=\"label\")\n\n# Consturct 3 pipelines\npipeline_rf = Pipeline(stages=[vec_asembler, scalar, rf])\npipeline_lr = Pipeline(stages=[vec_asembler, scalar, lr])\npipeline_gbt = Pipeline(stages=[vec_asembler, scalar, gbt])"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"c7069426-a1d5-4d0a-ade1-fc5d957f930f"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["rf_model = pipeline_rf.fit(train)\nlr_model = pipeline_lr.fit(train)\ngbt_model = pipeline_gbt.fit(train)"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"ab7cf199-6764-4004-bb78-b318d61c32cc"}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["####3. 模型评估"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"a36d1b83-bfda-4f8b-8aa2-7a92f13f83b1"}}},{"cell_type":"code","source":["def modelEvaluations(model, metric, data):\n    \"\"\" Evaluate a machine learning model's performance \n        Input: \n            model - pipeline object\n            metric - the metric of the evaluations\n            data - data being evaluated\n        Output:\n            [score, confusion matrix]\n    \"\"\"\n    # generate predictions\n    evaluator = MulticlassClassificationEvaluator(metricName = metric)\n    predictions = model.transform(data)\n    \n    # calcualte score\n    score = evaluator.evaluate(predictions)\n    confusion_matrix = (predictions.groupby(\"label\")\n                                   .pivot(\"prediction\")\n                                   .count()\n                                   .toPandas())\n    return [score, confusion_matrix]"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"88268d2e-fe28-4be8-9e94-157f399e500f"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["f1_rf, conf_mtx_rf = modelEvaluations(rf_model, 'f1', test)\nf1_lr, conf_mtx_lr = modelEvaluations(lr_model, 'f1', test)\nf1_gbt, conf_mtx_gbt = modelEvaluations(gbt_model, 'f1', test)"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"bc9d7661-8875-4f89-9f12-da8433e31f66"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["print('The F1 score for the random forest model:', f1_rf)\nconf_mtx_rf"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"d144da5e-2b1a-4ffd-b70d-7e406770b874"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"The F1 score for the random forest model: 0.7227495649422561\n","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["The F1 score for the random forest model: 0.7227495649422561\n"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>label</th>\n      <th>0.0</th>\n      <th>1.0</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>38</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>10</td>\n      <td>1.0</td>\n    </tr>\n  </tbody>\n</table>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>label</th>\n      <th>0.0</th>\n      <th>1.0</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>38</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>10</td>\n      <td>1.0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"]}}],"execution_count":0},{"cell_type":"code","source":["print('The F1 score for the logistic regression model:', f1_lr)\nconf_mtx_lr"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"540061fe-ae00-4eca-b99f-184f91e4beb4"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"The F1 score for the logistic regression model: 0.8226757369614512\n","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["The F1 score for the logistic regression model: 0.8226757369614512\n"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>label</th>\n      <th>0.0</th>\n      <th>1.0</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>36</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>6</td>\n      <td>5</td>\n    </tr>\n  </tbody>\n</table>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>label</th>\n      <th>0.0</th>\n      <th>1.0</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>36</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>6</td>\n      <td>5</td>\n    </tr>\n  </tbody>\n</table>\n</div>"]}}],"execution_count":0},{"cell_type":"code","source":["print('The F1 score for the gradient boosting model:', f1_gbt)\nconf_mtx_gbt"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"dd09c634-a92b-4067-9170-729bacd1e136"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"The F1 score for the gradient boosting model: 0.7812146545365134\n","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["The F1 score for the gradient boosting model: 0.7812146545365134\n"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>label</th>\n      <th>0.0</th>\n      <th>1.0</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>37</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>8</td>\n      <td>3</td>\n    </tr>\n  </tbody>\n</table>\n</div>","textData":null,"removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"htmlSandbox","arguments":{}}},"output_type":"display_data","data":{"text/html":["<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>label</th>\n      <th>0.0</th>\n      <th>1.0</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>37</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>8</td>\n      <td>3</td>\n    </tr>\n  </tbody>\n</table>\n</div>"]}}],"execution_count":0},{"cell_type":"markdown","source":["决策树中的feature 重要性"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"bc5baf0f-24a2-4f72-b2cb-a0a2c56f5dbf"}}},{"cell_type":"code","source":["feature_importances = np.array(gbt_model.stages[-1].featureImportances)\nuserAgentVec = feature_importances[len(feature_names) :].sum()\nfeature_importances = feature_importances[:len(feature_names)] + [userAgentVec]"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"201b2301-dd30-469c-99ed-5b8deda18c5f"}},"outputs":[],"execution_count":0},{"cell_type":"code","source":["feature_importance = pd.DataFrame(feature_importances, \n                                     index = feature_names,\n                                     columns = ['Importance']).sort_values(by = 'Importance', ascending = False)\nfeature_importance.plot(kind = 'bar', figsize = (10, 7), title = 'Feature Importance of GBT')\nplt.xticks(rotation = 60)"],"metadata":{"application/vnd.databricks.v1+cell":{"title":"","showTitle":false,"inputWidgets":{},"nuid":"13ebb827-46cd-476e-b899-faed7a0f3021"}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Out[37]: (array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n        17, 18, 19]),\n [Text(0, 0, 'days_active'),\n  Text(1, 0, 'Roll Advert'),\n  Text(2, 0, 'num_sessions'),\n  Text(3, 0, 'Home'),\n  Text(4, 0, 'Add Friend'),\n  Text(5, 0, 'Help'),\n  Text(6, 0, 'Thumbs Down'),\n  Text(7, 0, 'Add to Playlist'),\n  Text(8, 0, 'Settings'),\n  Text(9, 0, 'Thumbs Up'),\n  Text(10, 0, 'days_free'),\n  Text(11, 0, 'NextSong'),\n  Text(12, 0, 'Downgrade'),\n  Text(13, 0, 'Logout'),\n  Text(14, 0, 'Error'),\n  Text(15, 0, 'Upgrade'),\n  Text(16, 0, 'total_length'),\n  Text(17, 0, 'Submit Upgrade'),\n  Text(18, 0, 'Submit Downgrade'),\n  Text(19, 0, 'days_paid')])","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["Out[37]: (array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n        17, 18, 19]),\n [Text(0, 0, 'days_active'),\n  Text(1, 0, 'Roll Advert'),\n  Text(2, 0, 'num_sessions'),\n  Text(3, 0, 'Home'),\n  Text(4, 0, 'Add Friend'),\n  Text(5, 0, 'Help'),\n  Text(6, 0, 'Thumbs Down'),\n  Text(7, 0, 'Add to Playlist'),\n  Text(8, 0, 'Settings'),\n  Text(9, 0, 'Thumbs Up'),\n  Text(10, 0, 'days_free'),\n  Text(11, 0, 'NextSong'),\n  Text(12, 0, 'Downgrade'),\n  Text(13, 0, 'Logout'),\n  Text(14, 0, 'Error'),\n  Text(15, 0, 'Upgrade'),\n  Text(16, 0, 'total_length'),\n  Text(17, 0, 'Submit Upgrade'),\n  Text(18, 0, 'Submit Downgrade'),\n  Text(19, 0, 'days_paid')])"]}},{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"\n","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"image","arguments":{}}},"output_type":"display_data","data":{"image/png":"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fEl8Bp8ATxKBZHWN2v/M7FMi8FwN2Mzd66v1E5ESmI4vEWkPzGwt4DJ3H9DKmyIi0miq4RIRERHJTAGXiIiISGZqUhQRERHJTDVcIiIiIpm1uYFP+/Xr5wsvvHBrb4aIiIhIgx577LH33L16vMLvaXMB18ILL8z48eNbezNEREREGmRmrzb8KjUpioiIiGSngEtEREQkMwVcIiIiIpm1uRwuERERqc0333zDlClT+PLLL1t7Uzq8Hj16MGDAALp27dqk/1fAJSIi0k5NmTKFXr16sfDCC2Nmrb05HZa78/777zNlyhQWWWSRJq1DTYoiIiLt1Jdffknfvn0VbGVmZvTt27dZNYkKuERERNoxBVsto7mfswIuERERkcyUwyUiItJBLHzIzaWub/KYTRp8zRxzzMGnn35aarkzM3nyZB566CG22267FiuzDKrhEhERkXZh6tSpTJ48mSuuuKK1N6XRFHCJiIhIs917772sueaajBo1isGDB3PIIYdw+eWXM3z4cJZddlkmTpwIwOjRo9ljjz0YNmwYSyyxBDfddBMQHQB+8YtfsOyyy7LCCitwzz33AHDxxRez2Wabsc4667DuuutyyCGHcP/99zN06FBOPfVUJk+ezBprrMGKK67IiiuuyEMPPTRte9Zaay223HJLllxySbbffnvcHYBx48bxwx/+kOWXX57hw4fzySef8O2333LwwQez8sors9xyy3HuueeW+vmoSVFERERK8dRTT/HCCy/Qp08fBg8ezK677sqjjz7KaaedxhlnnMGf//xnIJoFH330USZOnMjaa6/NhAkTOPPMMzEznnnmGV588UVGjhzJyy+/DMDjjz/O008/TZ8+fbj33ns5+eSTpwVqn3/+OXfccQc9evTglVdeYdttt502J/MTTzzBc889xwILLMCIESN48MEHGT58OFtvvTVXX301K6+8Mh9//DGzzTYbF1xwAb1792bcuHF89dVXjBgxgpEjRzZ5GIhqCrhERESkFCuvvDLzzz8/AIsuuigjR44EYNlll51WYwWw1VZb0alTJxZffHEGDx7Miy++yAMPPMC+++4LwJJLLsmgQYOmBVzrr78+ffr0qbfMb775hn322Ycnn3ySzp07T/sfgOHDhzNgwAAAhg4dyuTJk+nduzfzzz8/K6+8MgBzzjknALfffjtPP/001157LQAfffQR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MwVcIiIiIpkp4BIRERHJTAGXiIiISGYKuEREREQyU8AlIiIikpkCLhEREZHMFHCJiIiIZKaAS0RERCQzBVwiIiIimSngEhEREclMAZeIiIhIZgq4RERERDJTwCUiIiKSmQIuERERkcwUcImIiIhkpoBLREREJDMFXCIiIiKZKeASERERyUwBl4iIiEhmCrhEREREMlPAJSIiIpKZAi4RERGRzBRwiYiIiGSmgEtEREQkMwVcIiIiIpkp4BIRERHJTAGXiIiISGYKuEREREQyU8AlIiIikpkCLhEREZHMFHCJiIiIZKaAS0RERCQzBVwiIiIimSngEhEREclMAZeIiIhIZgq4RERERDJTwCUiIiKSmQIuERERkcwUcImIiIhkpoBLREREJDMFXCIiIiKZKeASERERyUwBl4iIiEhmCrhEREREMlPAJSIiIpKZAi4RERGRzBRwiYiIiGSmgEtEREQkMwVcIiIiIpkp4BIRERHJTAGXiIiISGYKuEREREQyU8AlIiIikpkCLhEREZHMFHCJiIiIZKaAS0RERCQzBVwiIiIimSngEhEREcmspoDLzDY0s5fMbIKZHVLP8z8ys8fNbKqZbVn13Ldm9mT6GVvWhouIiIi0F10aeoGZdQbOBNYHpgDjzGysuz9feNlrwGjgoHpW8YW7D23+poqIiIi0Tw0GXMBwYIK7TwIws6uAUcC0gMvdJ6fnvsuwjSIiIiLtWi1NigsCrxceT0nLatXDzMab2cNmtnljNk5ERESkI6ilhqu5Brn7G2Y2GLjbzJ5x94nFF5jZ7sDuAAsttFALbJKIiIhIy6mlhusNYGDh8YC0rCbu/kb6PQm4F1ihntec5+7D3H1Y//79a121iIiISLtQS8A1DljczBYxs27ANkBNvQ3NbG4z657+7geMoJD7JSIiIjIraDDgcvepwD7AbcALwN/d/TkzO87MNgMws5XNbArwM+BcM3su/ftSwHgzewq4BxhT1btRREREpMOrKYfL3W8BbqladlTh73FEU2P1/z0ELNvMbRQRERFp1zTSvIiIiEhmCrhEREREMlPAJSIiIpKZAi4RERGRzBRwiYiIiGSmgEtEREQkMwVcIiIiIpkp4BIRERHJTAGXiIiISGYKuEREREQyU8AlIiIikpkCLhEREZHMFHCJiIiIZKaAS0RERCQzBVwiIiIimSngEhER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\n"}}],"execution_count":0}],"metadata":{"application/vnd.databricks.v1+notebook":{"notebookName":"Customer Churning","dashboards":[],"notebookMetadata":{"pythonIndentUnit":2},"language":"python","widgets":{},"notebookOrigID":522914588443955}},"nbformat":4,"nbformat_minor":0}
